home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 20 / 5 / DISK2058.ZIP / UNFAST.EXE / D.F < prev    next >
Text File  |  1980-01-01  |  3KB  |  184 lines

  1. ;D = Directory.
  2. #include fsort.fi
  3. #include fast32.fi
  4. #short
  5. var32 fsize,tsize,freek,totald
  6. const dlen=22
  7. waiting=0
  8. tsize=0
  9.  
  10. proc abort beep:terminate
  11.  
  12. on error
  13.     {
  14.     print bios
  15.     error msg "\dos.err"
  16.     print bios "!"
  17.     abort
  18.     }
  19.  
  20. proc get_file_spec
  21.     {
  22.     m=81h
  23.     while peekb m<>13
  24.     {
  25.     b=peekb m
  26.     if (b<>' ') and (b<>9) then goto use_line
  27.     m++
  28.     }
  29.     return
  30.  
  31.     use_line:
  32.     f=files
  33.     while peekb m<>13
  34.     {
  35.     b=peekb m:m++
  36.     if (b=' ') or (b=9) then goto zero_it
  37.     pokeb f,b:f++:if f>files_end then goto zero_it
  38.     }
  39.     zero_it:
  40.     if not searchb f-files from files for '.' then
  41.     {
  42.     pokeb f,'*'
  43.     pokeb f+1,'.'
  44.     pokeb f+2,'*'
  45.     f+=3
  46.     }
  47.     pokeb f,0
  48.     }
  49.  
  50. proc get_files
  51.     {
  52.     ds=allocate 4096
  53.     count=0:m=0
  54.     reg dx=files,cx=16h:dos 4e
  55.     if carry then return
  56.     goto fentry
  57.  
  58.     forever
  59.     {
  60.     #errors off
  61.     find next
  62.     fentry:
  63.     if error then return
  64.     #errors on
  65.  
  66.     os=dta segment:oo=dta offset
  67.     moveb 13 from os|oo+1eh to ds|m
  68.     attr=os[oo+15h]b
  69.     ds[m+13]b=attr
  70.     #long
  71.     if ((attr or 33) and 49)=33 then
  72.         {
  73.         fsize=peek os|(oo+1ah)
  74.         tsize+=fsize
  75.         ds[m+14]=low fsize
  76.         ds[m+16]=high fsize
  77.         ds[m+18]=os[oo+16h]
  78.         ds[m+20]=os[oo+18h]
  79.         }
  80.     #short
  81.     m+=dlen:count++
  82.     }
  83.     }
  84.  
  85. proc sort_files
  86.     {
  87.     if not sort(ds,0,dlen,count) then abort
  88.     }
  89.  
  90. proc show(attr,all)
  91.     {
  92.     m=0:any=0:two=0
  93.     #long
  94.     if count then repeat count
  95.     {
  96.     if ((ds[m+13]b or 33) and 49)=attr then ;Set archive bit.
  97.         {
  98.         f=m:any++
  99.         len=0
  100.         colour 15
  101.         while ds[f]b print chr ucase ds[f];:f++:len++
  102.         colour 7
  103.         if len<12 then repeat 12-len print " ";
  104.         if all then
  105.         {
  106.         n32=(peek ds|(m+14)+1023)/1024
  107.         nn=low n32
  108.         nd=digits nn
  109.         if nd<>5 then repeat 5-nd print " ";
  110.         print nn;"k";
  111.         two++
  112.  
  113.         #short
  114.         if two=4 then
  115.             {
  116.             two=0
  117.             if keypressed or (waiting<>0) then
  118.             {
  119.             if key=27 then abort
  120.             wait for keypressed
  121.             k=key:if k=27 then abort
  122.             if k=13 then waiting=0 else waiting=1
  123.             }
  124.             print
  125.             }
  126.         else print "  ";
  127.  
  128.         #long
  129.         }
  130.         else print "    ";
  131.         }
  132.     m+=dlen
  133.     }
  134.     #short
  135.     if all then
  136.     {
  137.     if two then print
  138.     if not any then print "(none)"
  139.     }
  140.     }
  141.  
  142. proc display_files
  143.     {
  144.     curtoloc:
  145.     colour 15
  146.     print "D ";
  147.     prints files,0
  148.     print "    (by Peter Campbell, 1988/89)"
  149.     colour 7:print "Directories:    ";
  150.     show(49,0)
  151.     print
  152.     colour 7:print "Files:"
  153.     show(33,1)
  154.  
  155.     tsize=(tsize+1023)/1024
  156.  
  157.     drive=0
  158.     if peekb(files+1)=':' then drive=1+(ucase peekb files)-'A'
  159.     reg dx=drive:dos 36
  160.     sectors_cluster=reg ax
  161.     if carry then abort
  162.     free_clusters=reg bx
  163.     bytes_sector=reg cx
  164.     total_clusters=reg dx
  165.     freek=sectors_cluster*bytes_sector*free_clusters
  166.     freek=(freek+1023)/1024
  167.     print "    ";any;" files (";low tsize;"k), ";low freek;"k free."
  168.     loctocur
  169.     }
  170.  
  171. ;BEGIN
  172.  
  173. get_file_spec
  174. get_files
  175. sort_files
  176. display_files
  177. stop
  178.  
  179.  
  180. files:
  181. fname '*.*'
  182. space 61
  183. files_end:
  184.